/**
 * @ProjectName: p2p_common 
 * @Copyright: Copyright (c) 2016, qudoulicai All Rights Reserved. 
 * @address: Hangzhou City, Zhejiang Province, China
 * @date: 2016年1月29日 下午4:20:41
 * @Description: 对象拷贝工具类
 */
package com.qdlc.p2p.common.util;

import java.util.HashMap;
import java.util.Map;

import org.springframework.cglib.beans.BeanCopier;

/**
 * <p>对象拷贝工具类</p>
 * @author Kaiju Zhao 2016年1月29日 下午4:20:41
 * @version V1.0   
 * @modificationHistory=========================逻辑或功能性重大变更记录
 * @modify by user: {修改人} 2016年1月29日 下午4:20:41
 * @modify by reason:{原因}
 */
public class BeanCopierUtils {
    
    private static Map<String, BeanCopier> beanCopierMap = new HashMap<String, BeanCopier>();
    
    /**
     * <p>封装org.springframework.cglib.beans.BeanCopier,同名属性拷贝，性能明显优于Apache的BeanUtils和PropertyUtils、Spring的BeanUtils</p>
     * @author Kaiju Zhao 2016年1月29日 下午4:26:15
     * @param source
     * @param target
     * @modificationHistory=========================逻辑或功能性重大变更记录
     * @modify by user: {修改人} 2016年1月29日 下午4:26:15
     * @modify by reason:{原因}
     */
    public static void copyProperties(Object source, Object target) {
        String beanKey = generateKey(source.getClass(), target.getClass());
        BeanCopier copier;
        if (!beanCopierMap.containsKey(beanKey)) {
            copier = BeanCopier.create(source.getClass(), target.getClass(), false);
            beanCopierMap.put(beanKey, copier);
        } else {
            copier = beanCopierMap.get(beanKey);
        }
        copier.copy(source, target, null);
    }
    
    private static String generateKey(Class<?> source, Class<?> target) {
        return source.toString() + target.toString();
    }
}
